package educar.docente;

import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.PreparedStatement;

import educar.alumno.AlumnoNoEncontrado;
import educar.db.*;

/**
 * Clase encargada de realizar las consultas a la base de
 * datos a traves de los metodos de la clase jpa.
 * @author Mariano
 */
public class DocenteController{
	private static JPA jpa = new JPA();

	public static boolean existe (String dni) {
		try {
			Docente doc = getDocente(dni);
			return true;
		} catch (DocenteNoEncontrado ex) {
			return false;
		}
	}
	
	/**
	 * Metodo que permite agregar un nuevo registro en la tabla docente
	 * con los datos obtenidos del objeto pasado por parametro.
	 * @param docente
	 */
	public static boolean save(Docente docente) {
		try {
			getDocente(docente.getDni());
			return false;
		} catch (DocenteNoEncontrado e1) {
			String[] columns = { "dni", "nombre", "apellido","fecha_nac" };

			PreparedStatement stm = jpa.newRecord(DbConnection.bd+".docente", columns);

			try {
				stm.setString(1, docente.getDni());
				stm.setString(2, docente.getNom());
				stm.setString(3, docente.getAp());
				stm.setString(4, docente.getFecha());
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			}

			jpa.create(stm);
			return true;
		}
	}
	
	/**
	 * Metodo encargado de eliminar un registro de la tabla docente, donde la
	 * primari key coincide con el DNI que se pasa como parametro.
	 * @param dni
	 */
	public static void destroy(String dni) {
		jpa.destroy("docente", "dni", dni);
	}
	
	/**
	 * Retorna una objeto de la clase docente instanciado con los datos obtenidos 
	 * de la base de datos.
	 * @param dni
	 * @return
	 * @throws DocenteNoEncontrado
	 */
	public static Docente getDocente (String dni) throws DocenteNoEncontrado {
		ResultSet rs = null;
		Docente docente = null;

		rs = jpa.getByField("docente", "dni", dni);
			
		try {
			if (rs.next()) {
				docente = new Docente (rs.getString(1), rs.getString(2), rs.getString(3),rs.getString(4));
			} else {
				throw new DocenteNoEncontrado();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return docente;
	}
	
	/**
	 * Actualiza los datos de un registro en la tabla.
	 * @param column "Nombre de la columna"
	 * @param value "Valor que reemplaza al existente"
	 * @param id "Campo por el cual se identifica"
	 */
	public static void update (String column,String value, String id) {
		jpa.update("docente", column, value,"dni",id);
	}
}